perm filename ITMSBX.F4[MSS,LCS]7 blob
sn#133859 filedate 1974-12-03 generic text, type T, neo UTF8
00100 C**** ITMSUB, BMS, METER, RNOTE , MAKNUM ********
00200 C ********** WHOLE & HALF RESTS, BEAMS ******
00300 SUBROUTINE ITMSUB
00400 IMPLICIT INTEGER(A-Q,S-Z)
00500 REAL DIS,PWDS,DISX,HGT,POS,CENTR,STFF,HGT1
00600 COMMON/STF/RSTFAC(-3/4),RSTJ3/MIN/MINI,RMINI
00700 COMMON R2,JA,CENTR,J2,RJQ(20),JQ(20)/BM/RA,RC,RJY
00800 COMMON/POSI/STFF(-3/4),JJ2,POS/PLTR/PLT,RHT,DIS
00900 COMMON/ALF/QQ(3),RST7,RST18,R2Q,JY,RD,RX,RW,RJX,RJ,L,K,
01000 1 RJA,DRJY,DISX,HGT,RZ,INP(53)
01100 EQUIVALENCE (J3,JQ(1)),(J4,JQ(2)),(J5,JQ(3)),(R5,RJQ(3))
01200 1,(R6,RJQ(4)),(J7,JQ(5)),(J8,JQ(6)),(J9,JQ(7)),(J10,JQ(8))
01300 1,(J11,JQ(9)),(J6,JQ(4)),(R9,RJQ(7)),(R8,RJQ(6))
01400 1 ,(R7,RJQ(5)),(R4,RJQ(2)),(R9,RJQ(7)),(R10,RJQ(8))
01500 DATA R14/14.54/,RTF/3.0/,RHGT/48.0/,R2HGT/96.0/,RBM/.83/
01600 RST7=RSTJ3*7.
01700 RST18=RSTJ3*18.
01800 C TO COMPENSATE FOR NOTE #3 COMING AT POS=0
01900
02000 R2Q=R2
02100 JY=0
02200 IF(JA.EQ.9)GO TO 90
02300 IF(JA.EQ.10)GO TO 100
02400 C GO TO LINES, BEAMS, STAVES.
02500 C NEXT DRAWS STRAIGHT LINES
02600
02700 RD=R4*RST7
02800 RA=0
02900 C WHY "*RSTJ3"????
03000 RX=RTF+POS
03100 IF(J5.EQ.50)GO TO 300
03200 IF(R6.GT.0.OR.J7)GO TO 401
03300 C FOR BAR LINES
03400 JA=44
03500 C CODE # IS CHNGD SO BAR LINES WON'T AFFECT MAX. HGT.
03600 CC IF(J7)GO TO 407
03700 C ↑↑↑↑↑↑↑↑↑ FOR VERTICAL WIGGLE (P6=0, P7=-1)
03800 IF(J7.EQ.0)J7=J4/100
03900 RA=1
04000 IF(PLT.GE.0)GO TO 40
04100 J7=J7+1
04200 RA=1./DIS
04300 C BAR LINES PLOT AS DOUBLE THICKNESS
04400 40 RX=RTF*RSTJ3+POS
04500 L=MOD(J4,100)+J3-1
04600 C J4=401 MAKES 4X THICK BARLINE - ONE STAFF
04700 RY=STFF(L)+.5+RSTFAC(L)*58.
04800 RW=RY
04900 RJX=R2Q
05000 42 CALL LINES(R2Q,RX,3)
05100 CC IF(J7.EQ.-2)GO TO 404
05200 C IF J7<0 THEN WIGGLEY LINES ARE MADE.
05300 RJ=-1.
05400 406 CALL LINES(RJX,RY,2)
05500 IF(J7.LE.0)RETURN
05600 C FOR 'HEAVY' LINE.
05700 RJX=RJX+RA
05800 CALL LINES(RJX,RY,2)
05900 J7=J7-1
06000 RY=RW
06100 IF(RJ)RY=RX
06200 RJ=-RJ
06300 GO TO 406
06400 43 IF(RA.GT.0)GO TO 403
06500 RETURN
06600 C HOV IS RA.NE.0?
06700 C DRAWS BAR LINES. J4>0 CAUSES FULL LINE.
06800 403 RA=RA-3.72
06900 R2Q=R2Q+22
07000 RJX=RJX+22
07100 C DO ABOVE NEED *RSTJ3? ************
07200 C **** BASED ON '596' ****
07300 GO TO 42
07400
07500 C FOR CRESC., DECRESC.
07600 300 RA=ABS(R7/2.0)*RST7
07700 C AMOUNT OF SPREAD
07800 RJ=R2Q
07900 RX=RX-RST18+RD
08000 IF(R8.NE.0)GO TO 302
08100 C JUMP TO MAKE BOX
08200 R6=RHORZ(R6)
08300 IF(R7)GO TO 301
08400 RJ=R6
08500 R6=R2Q
08600 301 CALL LINX(RJ,RX+RA,R6,RX)
08700 CALL LINES(RJ,RX-RA,2)
08800 C FOR CRESC, DECRESC: 4 POS1, STF, HGT, 50, POS1, +OR-N
08900 RETURN
09000
09100 302 R8=R8*RST7
09200 R9=R9*RST7
09300 IF(R9.EQ.0)R9=R8
09400 R2=R2Q-R8/2.
09500 RX=RX-R9/2.
09600 C DRAWS BOX, CENTER IS IN MIDDLE
09700 C 4,POS,STF,NT#,50,0,0,,SIZ1[BY NT#S],SIZ2
09800 CALL LINX(R2,RX,R2+R8,RX)
09900 CALL LINES(R2+R8,RX+R9,2)
10000 CALL LINES(R2,RX+R9,2)
10100 CALL LINES(R2,RX,2)
10200 RETURN
10300
10400 C DASHES
10500 401 POS=POS-RST18
10600 C********* 27/9/72 ******
10700 IF(J7.EQ.0)GO TO 407
10800 CC IF(J7)GO TO 421
10900 IF(J7)GO TO 407
11000 IF(R8.EQ.0)R8=.8
11100 C P8 CAN SET SIZE OF DASH
11200 RD=RD+POS
11300 IF(ABS(R6-R2).LT..01)GO TO 402
11400 C VERTICAL DASHES IF P6=P2
11500 R6=RHORZ(R6)
11600 R8=R8*5.96*RSTJ3
11700 420 CALL LINX(R2Q,RD,R2Q+R8,RD)
11800 R2Q=R2Q+R8+R8
11900 IF(R2Q.GE.R6)RETURN
12000 GO TO 420
12100
12200 CC IF(J7.GT.0)J7=0
12300 CC GO TO 407
12400 402 RA=POS+R5*RST7
12500 RJ=R8*RST7
12600 CC RX=RD+POS
12700 L=3
12800 K=2
12900 41 IF(RD.GT.RA)RETURN
13000 C DASHES MUST GO FROM BOTTOM TO TOP.
13100 CALL LINES(R2Q,RD,L)
13200 RD=RD+RJ
13300 CALL EXCH(K,L)
13400 GO TO 41
13500
13600 407 RX=RD+POS
13700 RY=R5*RST7+POS
13800 IF(J7.EQ.-1)GO TO 408
13900 C FOR 'TR' J7=-2, 'ARPEGG' J7=-1, STRAIGHT LINES J7=0
14000 RJX=IFIX(RHORZ(R6))
14100 IF(J7.EQ.0)GO TO 42
14200 4041 CALL NOZERO(R8)
14300 CALL LINES(R2Q,RX,3)
14400 C DRAWS STRAIGHT LINES. ETC.
14500 R9=R2Q
14600 RJ=RY
14700 RW=3.*RSTJ3*R8
14800 RA=RW*2.5
14900 C P8=HORZ. WIGGLE SIZE; P5=VERT.
15000 404 R9=R9+RA
15100 CALL LINES(R9,RJ,2)
15200 R9=R9+RW
15300 CALL LINES(R9,RJ,2)
15400 405 CALL EXCH(RX,RJ)
15500 IF(R9.LT.RJX)GO TO 404
15600 IF(J10.LE.0)RETURN
15700 POS=POS+1
15800 J10=J10-1
15900 GO TO 407
16000 C P10= + NUM OF THICKNESSES TO WIGGLE
16100
16200 408 IF(RX.GT.RY)CALL EXCH(RX,RY)
16300 CALL NOZERO(R9)
16400 RZ=R9*RSTJ3*5.96
16500 C USE P9 TO SET WIGGLE WIDTH. P8 TO SET HGT.
16800 IF(R8.EQ.0)R8=1.
16900 CC RD=R8*RST7/3.
16950 RD=R8*RST7*.5
16960 CC RD=R8*RST7*.6
17000 CC RJ=RD*.66666
17050 RJ=RD
17100 IF(RD.LT.1.)RD=1.
17200 421 R9=RX
17300 RW=R2Q
17400 RA=RZ+R2Q
17500 CALL LINES(RW,R9,3)
17600 410 R9=R9+RJ
17700 CALL LINES(RA,R9,2)
17800 R9=R9+RD
17900 CALL LINES(RA,R9,2)
18000 CALL EXCH(RA,RW)
18100 IF(R9.LT.RY)GO TO 410
18200 IF(J10.LE.0)RETURN
18300 R2Q=R2Q+1
18400 J10=J10-1
18500 GO TO 421
18600 C VERTICAL WIGGLE P10=+ NUM OF THICKNESSES.
18700
18800
18900 C NEXT IS FOR BEAMS
19000 90 RMINI=RSTJ3
19100 RX=2.7*RSTJ3*5.96
19200 C******************************
19300 R6=RHORZ(R6)
19310 R9=RHORZ(R9)
19400 IF(J10.LT.10)GO TO 91
19500 C NEXT FOR INNER, PARTIAL BEAMS
19650 R8=RHORZ(R8)
19700 R10=AMOD(R10,10.)
19800 GO TO(2,3,4),J10/10
19900 2 R8=R9+RX
20000 GO TO 4
20100 3 R8=R9-RX
20300 C 10=SHORT PARTIAL LFT→RT., 20=RT.←LFT, 30=TO POS IN P8
20400 4 RH=R8
20500 C LEFT INNER POS.
20600 GO TO 1
20700 C******************************
20800 91 IF(J8.GE.0)GO TO 1
20900 92 R9=R2+RX
21000 IF(J8.LE.-20)R9=R6-RX
21100 192 J8=-J8
21200 IF(J10.EQ.0)J10=MOD(J8,10)
21300 J8=J8-J10
21400 IF(J10.EQ.0)J10=1
21500 R10=J10
21600 C IF P8 NEG, P9 IS AUTOMATIC, ALSO P10 IF NEEDED.
21700 1 IF(IABS(J4).LT.100)GO TO 97
21800 RMINI=.6*RSTJ3
21900 R5=AMOD(R5,100.0)
22000 C SPACE BETWEEN BEAMS
22100 97 RJ=RMINI*11.
22200 RW=RMINI*RHGT
22300 C DIST. UP OR DOWN FROM NOTE HEAD.
22400 RJA=R10*RJ
22500 C DISPLACEMENT
22600 CC RD=RHORZ(ABS(R9))
22700 RD=R9
22800 C POSITION 3
22900 RJX=CENTR-RW+RJA
23000 C FINAL HEIGHT
23100 CC?????? RX=MOD(J7,10)-MOD(J8,10)
23200 IF(J7)J7=-J7
23300 C NEG R7=TREMOLO
23400 RX=MOD(J7,10)
23500 JJ2=J7-20
23600 RA=R6
23700 C HORIZANTAL DIST.
23800 RJY=R5*RST7+POS-RST18-RW+RJA
23900 C************************
24000 RW=R14*RMINI
24100 RY=1.
24200 IF(J7.GE.20)GO TO 930
24300 C JUMP IF STEMS ARE DOWN
24400 RY=-RY
24500 C FOR THICKENING INCR.
24600 JJ2=J7-10
24700 RJ=-RJ
24800 CCAUG.7,73 RJA=RMINI*R2HGT-2.*RJA-3.
24900 CC RY=-3
25000 CC IF(RMINI.LT..65)RY=-1
25100 CC RJA=RMINI*R2HGT-2.*RJA+RY
25200 RJA=RMINI*R2HGT-2.*RJA
25300 RJX=RJX+RJA
25400 RJY=RJY+RJA
25500 R2Q=R2Q+RW
25600 C POSITION 1
25700 RA=RA+RW
25800 C POSITION 2
25900 RD=RD+RW
26000 C******************************
26100 RH=RH+RW
26200 930 IF(R7.GE.0)GO TO 98
26300 R2Q=R2Q-13.*RSTJ3
26400 C SHIFTS HEAD OF TREM. TO LEFT.
26500 RA=R2Q+27.*RSTJ3
26600 98 RSTJ3=RSTJ3*RBM
26700 C RBM BRINGS LINES OF BEAMS CLOSER TOGETHER. (=.83)
26800 93 IF(JJ2.GT.RX)GO TO 94
26900 IF(J10.GE.10)GO TO 7
27000 C**********************
27100 IF(J8.EQ.0)GO TO 94
27200 R3=RW
27300 C******************************
27400 CC IF(R9.EQ.0)GO TO 292
27500 IF(J9.EQ.0)GO TO 292
27600 IF(J8.GE.20)GO TO 193
27700 C******************************
27800 CC IF(J9.GT.0)GO TO 293
27900 293 RX=R2Q-RD
28000 GO TO 194
28100 C******************************
28200 7 RHX=RH-R2Q
28300 CC R3=RX-R2Q
28400 R3=RD-R2Q
28500 GO TO 292
28600 193 RX=RD-RA
28700 194 R3=ABS(RX)
28800 292 DISX=ABS(R2Q-RA)
28900 HGT=RJX-RJY
29000 IF(J10.GE.10)HGT1=HGT*RHX/DISX
29100 C**********************
29200 R3=R3/DISX
29300 195 HGT=HGT*R3
29400 196 L=J8/10
29500 J8=0
29600 IF(J10.GE.10)GO TO 8
29700 C***************
29800 IF(L.EQ.1)GO TO 95
29900 C BEAM LFT=1, RT=2 (PARAM 8=10 OR 20)
30000 R2Q=RD
30100 RJX=RJY+HGT
30200 GO TO 94
30300 C**************
30400 8 R2Q=RH
30500 RA=RD
30600 RJY=RJX-HGT
30700 RJX=RJX-HGT1
30800 GO TO 94
30900 95 RA=RD
31000 RJY=RJX-HGT
31100 94 RC=0
31200 L=8
31300 CC IF(RMINI.LT..65)L=3
31400 IF(RMINI.LT.1.)L=7.*RMINI
31500 C MINI LINES HAVE .2 SMALLER BEAMS. MAYBE CHANGE THIS??
31600 CALL LINES(R2Q,RJX,3)
31700 DO 941 K=1,L
31800 CALL BMS
31900 IF(PLT.GE.0)GO TO 940
32000 CC RC=RC+1
32100 RC=RC+RY
32200 C FOR THICKENING.
32300 CALL BMS
32400 CALL EXCH(RA,R2Q)
32500 941 CALL EXCH(RJY,RJX)
32600 CALL BMS
32700 C DRAWS 5 LINES FOR BEAMS.
32800 940 JJ2=JJ2-1
32900 IF(JJ2.LE.0)RETURN
33000 C IF P7=10 OR 20 ONE BEAM WILL APPEAR.
33100 RJY=RJY+RJ
33200 RJX=RJX+RJ
33300 GO TO 93
33400
33500 100 RA=0
33600 C FOR STAFF LINES: 10, POS 1, HGT(3 TO -3), 2ND POS., UP-DOWN(NT #S)
33700 C P6=SIZE FACTOR, IF P7≠0 STAFF IS INVIS.
33800 CC J3=J3+4
33900 IF(R6.EQ.0)R6=RSTFAC(J3)
34000 IF(R6.EQ.0)R6=1.
34100 RSTFAC(J3)=R6
34200 STFF(J3)=(J3+3)*123-369.+R5*7.*R6
34300 IF(J7.EQ.0)GO TO 101
34400 CALL LINES(0,0,3)
34500 C TO ACTIVATE DPY BUFFER
34600 RETURN
34700 101 RX=STFF(J3)+RTF*R6
34800 C FOR RTF SEE DATA
34900 C FOR 2 PASS PLOTTING
35000 CC R2=RHORZ(R2)
35100 RJ=RHORZ(FLOAT(J4))
35200 IF(J4.EQ.0)RJ=596
35300 R6=R6*14.
35400 DO 6 K=1,5
35500 RZ=RJ
35600 RW=R2
35700 IF(K.EQ.2.OR.K.EQ.4)CALL EXCH(RW,RZ)
35800 CALL LINX(RZ,RX,RW,RX)
35900 6 RX=RX+R6
36000 END
36100
36200 SUBROUTINE BMS
36300 COMMON/STF/RSTFAC(-3/4),RSTJ3/BM/RA,RC,RJY
36400 CALL LINES(RA,RJY+RC*RSTJ3,2)
36500 END
36600
36700 SUBROUTINE METER
36800 COMMON R2,JA,CENTR,J2,RJQ(20),JQ(20)/STF/RSTFAC(-3/4),RSTJ3
36900 EQUIVALENCE (R4,RJQ(2)),(R7,RJQ(5)),(R6,RJQ(4)),(R5,RJQ(3))
37000
37100 C PARAMS 18 / POS / STF / TOP NUM/ BOT NUM/ VERT.HGT/ SIZE FAC.
37200
37300 JZ=J2
37400 RY=R6+8.
37500 C HEIGHT
37600 RW=R5
37700 C BOTTOM NUM
37800 R6=R4
37900 C TOP NUM
38000 R5=R7
38100 C SIZE
38200 C FOR BDR40 -- OR =1
38300 M=0
38400 R4=RY
38500 2 R7=0
38600 CC JA=5
38700 IF(R6.GE.10.)J2=J2+4.*RSTJ3
38800 C TO CENTER 12S AND 16S
38900 CALL MAKNUM(R6)
39000 IF(M)RETURN
39100 C STICK AROUND FOR BOTTOM NUM
39200 M=-1
39300 R4=RY-4.
39400 R6=RW
39500 C GET BOTTOM NUM
39600 J2=JZ
39700 GO TO 2
39800 END
39900
40000 SUBROUTINE RNOTE(X)
40100 COMMON /PTR/PWDS(250),ITEM,L,I,IX/XRN/RN(4000)
40200 X=RN(IFIX(PWDS(IFIX(AMOD(X,1000.))))+2)
40300 END
40400
40500 SUBROUTINE MAKNUM(RNUM)
40600 COMMON R2,JA,CENTR,J2,RJQ(20),JQ(20)/STF/RSTFAC(-3/4),RSTJ3
40700 EQUIVALENCE (J3,JQ(1)),(R4,RJQ(2)),(R8,RJQ(6)),(R7,RJQ(5))
40800 1,(R6,RJQ(4)),(R5,RJQ(3)),(R7,RJQ(5)),(JQ(15),B),(JQ(16),C)
40900 DATA RS/9.0/
41000 J2X=J2
41100 C P7=0=BDR40; =1=BDI40; =2=PRIM.
41200 J3=J2-RS*RSTJ3
41300 C FOR 2 DIGIT NUMBER
41400 CALL NOZERO(R5)
41500 CC2 R6=485000.00
41600 C UPPER CASE - BDR40
41700 CC IF(R7.EQ.2)R6=485100.00
41800 R6=480000.00+(R7+50.)*100.
41900 C P7=2 = BDI40 - ITALIC NUMS.
42000 R7=999999.99
42100 C BLANKS
42200 R8=R7
42300 IF(RNUM.GT.9.)GO TO 3
42400 C JUMP FOR 2 DIGIT NUMBER
42500 R6=R6+RNUM+.47
42600 C PUTS BLANK ON END (.47)
42700 GO TO 1
42800
42900 3 B=IFIX(RNUM/10.)
43000 C=AMOD(RNUM,10.)
43100 R6=R6+B+C/100.
43200 J2=J3
43300 1 CALL ALPHA
43400 J2=J2X
43500 C RETURNS ORIG. HORIZ. POS.
43600 END
43700 C MAKES ONLY 1 AND 2 DIGIT NUMS NOW. EXPAND LATER.